package hausaufgabe;

public class Zahlensysteme {
	
	// Attribut
	private int wert;
	
	// Methoden
	public void liesDezimal(String s)
	{
		wert = 0;
		for(int i = 0; i<s.length(); i++)
		{
			if(!Character.isDigit(s.charAt(i)))
			{
				throw new NumberFormatException();
			}
			wert += (s.charAt(i)-'0')*Math.pow(10, (s.length()-1-i));
		}
	}
	public void liesHexadezimal(String s)
	{
		wert = 0;
		for(int i = 0; i<s.length(); i++)
		{
			if((!Character.isDigit(s.charAt(i))&&!Character.isLetter(s.charAt(i)))||s.charAt(i)>71)
			{
				throw new NumberFormatException();
			}
			int hexaZiffer = s.charAt(i);
			if(Character.isDigit(hexaZiffer))
				hexaZiffer -= '0';
			else
				hexaZiffer = Character.toUpperCase(s.charAt(i))-55;
			wert += hexaZiffer*Math.pow(16, s.length()-1-i);
		}
	}
	public void liesBinaer(String s)
	{
		wert = 0;
		for(int i = 0; i<s.length(); i++)
		{
			if(s.charAt(i)-'0'!=1&&s.charAt(i)-'0'!=0)
			{
				throw new NumberFormatException();
			}
			int binaerZiffer = s.charAt(i)-'0';
			wert += binaerZiffer*Math.pow(2, s.length()-1-i);
		}
	}
	public String alsDezimal()
	{
		return ""+wert;
	}
	public String alsHexadezimal()
	{
		int zwischenErgebnis = wert;
		String hexa = "";
		while(zwischenErgebnis!=0)
		{
			if(zwischenErgebnis%16<=9)
				hexa = zwischenErgebnis%16+hexa;
			else
				hexa = (char)(zwischenErgebnis%16+55)+hexa;
			zwischenErgebnis /= 16;
		}
		if(hexa.equals(""))
			hexa = "0";
		return hexa;		
	}
	public String alsBinaer()
	{
		int zwischenErgebnis = wert;
		String binaer = "";
		while(zwischenErgebnis!=0)
		{
			if(zwischenErgebnis%2==1)
				binaer = 1+binaer;
			else
				binaer = 0+binaer;
			zwischenErgebnis /= 2;
      System.out.println(zwischenErgebnis);
		}
		if(binaer.equals(""))
			binaer = "0";
		return binaer;
	}
	public int getWert()
	{
		return wert;
	}
}